//==================================================================
// 文件名: V_BH_InsProduct.cs
// 作 者：代码自动生成
// 日 期：2015/1/6 9:28:59
// 描 述：
// 版 本：1.00
// 修改历史纪录
// 版 本  修改时间      修改人            修改内容
// 1.00             
//==================================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using System.Text;
using Csla;
using lite;
using Csla.Validation;
using Csla.Data;
using System.Data.SqlClient;
using ZX.DAL;
using OpenExpressApp.ORM;

namespace DCBH.Library
{
	/// <summary>
    /// 
    /// </summary>
	[Serializable]
    [Table(Name="V_BH_InsProduct")]
    [ZX.DBModule.Table("V_BH_InsProduct","ID")]
	public class V_BH_InsProduct: ZX.DBModule.BaseEntity
	{
        #region Business Methods 业务方法
        /// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > IDProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< Guid >("ID"));
        [DataObjectField(true, true)]
        [Column, PK]
        public Guid ID
        {
            get { return GetProperty(IDProperty); }
            set { SetProperty(IDProperty, value); }
        }
        
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > SystemGenNoProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("SystemGenNo"));
        [Column]
        public string SystemGenNo
        {
            get { return GetProperty(SystemGenNoProperty); }
            set { SetProperty(SystemGenNoProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > ReceiveNoProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("ReceiveNo"));
        [Column]
        public string ReceiveNo
        {
            get { return GetProperty(ReceiveNoProperty); }
            set { SetProperty(ReceiveNoProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< DateTime > ReceiveDateProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< DateTime >("ReceiveDate"));
        [Column]
        public DateTime ReceiveDate
        {
            get { return GetProperty(ReceiveDateProperty); }
            set { SetProperty(ReceiveDateProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > WorkOrderNoProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("WorkOrderNo"));
        [Column]
        public string WorkOrderNo
        {
            get { return GetProperty(WorkOrderNoProperty); }
            set { SetProperty(WorkOrderNoProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > FromBuProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("FromBu"));
        [Column]
        public string FromBu
        {
            get { return GetProperty(FromBuProperty); }
            set { SetProperty(FromBuProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > FromBuNameProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("FromBuName"));
        [Column]
        public string FromBuName
        {
            get { return GetProperty(FromBuNameProperty); }
            set { SetProperty(FromBuNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > FromWarehouseProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("FromWarehouse"));
        [Column]
        public string FromWarehouse
        {
            get { return GetProperty(FromWarehouseProperty); }
            set { SetProperty(FromWarehouseProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > FromWarehouseNameProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("FromWarehouseName"));
        [Column]
        public string FromWarehouseName
        {
            get { return GetProperty(FromWarehouseNameProperty); }
            set { SetProperty(FromWarehouseNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > ReceiveBuProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("ReceiveBu"));
        [Column]
        public string ReceiveBu
        {
            get { return GetProperty(ReceiveBuProperty); }
            set { SetProperty(ReceiveBuProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > ReceiveBuNameProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("ReceiveBuName"));
        [Column]
        public string ReceiveBuName
        {
            get { return GetProperty(ReceiveBuNameProperty); }
            set { SetProperty(ReceiveBuNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > ReceiveWarehouseProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("ReceiveWarehouse"));
        [Column]
        public string ReceiveWarehouse
        {
            get { return GetProperty(ReceiveWarehouseProperty); }
            set { SetProperty(ReceiveWarehouseProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > ReceiveWarehouseNameProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("ReceiveWarehouseName"));
        [Column]
        public string ReceiveWarehouseName
        {
            get { return GetProperty(ReceiveWarehouseNameProperty); }
            set { SetProperty(ReceiveWarehouseNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > TotalWeightProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< decimal >("TotalWeight"));
        [Column]
        public decimal TotalWeight
        {
            get { return GetProperty(TotalWeightProperty); }
            set { SetProperty(TotalWeightProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > PaperTubeProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< decimal >("PaperTube"));
        [Column]
        public decimal PaperTube
        {
            get { return GetProperty(PaperTubeProperty); }
            set { SetProperty(PaperTubeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > EmptyWeightProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< decimal >("EmptyWeight"));
        [Column]
        public decimal EmptyWeight
        {
            get { return GetProperty(EmptyWeightProperty); }
            set { SetProperty(EmptyWeightProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > ShippingWeightProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< decimal >("ShippingWeight"));
        [Column]
        public decimal ShippingWeight
        {
            get { return GetProperty(ShippingWeightProperty); }
            set { SetProperty(ShippingWeightProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > ShippingNameProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("ShippingName"));
        [Column]
        public string ShippingName
        {
            get { return GetProperty(ShippingNameProperty); }
            set { SetProperty(ShippingNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > ShippingNoProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("ShippingNo"));
        [Column]
        public string ShippingNo
        {
            get { return GetProperty(ShippingNoProperty); }
            set { SetProperty(ShippingNoProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > LocationProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("Location"));
        [Column]
        public string Location
        {
            get { return GetProperty(LocationProperty); }
            set { SetProperty(LocationProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > TransCodeProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("TransCode"));
        [Column]
        public string TransCode
        {
            get { return GetProperty(TransCodeProperty); }
            set { SetProperty(TransCodeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > TransCodeNameProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("TransCodeName"));
        [Column]
        public string TransCodeName
        {
            get { return GetProperty(TransCodeNameProperty); }
            set { SetProperty(TransCodeNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > TransReasonProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("TransReason"));
        [Column]
        public string TransReason
        {
            get { return GetProperty(TransReasonProperty); }
            set { SetProperty(TransReasonProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > RemarkProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("Remark"));
        [Column]
        public string Remark
        {
            get { return GetProperty(RemarkProperty); }
            set { SetProperty(RemarkProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > AddUserProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< Guid >("AddUser"));
        [Column]
        public Guid AddUser
        {
            get { return GetProperty(AddUserProperty); }
            set { SetProperty(AddUserProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > AddUserNameProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< string >("AddUserName"));
        [Column]
        public string AddUserName
        {
            get { return GetProperty(AddUserNameProperty); }
            set { SetProperty(AddUserNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< DateTime > AddTimeProperty = RegisterProperty(typeof(V_BH_InsProduct),new PropertyInfo< DateTime >("AddTime"));
        [Column]
        public DateTime AddTime
        {
            get { return GetProperty(AddTimeProperty); }
            set { SetProperty(AddTimeProperty, value); }
        }
        #endregion
        
        #region Validation Rules 验证规则
        //将验证规则与业务对象的属性联系在一起
        protected override void AddBusinessRules()
        {
            //AddRule的第一个参数是委托变量，也就是说是方法的变量
            ValidationRules.AddRule(CommonRules.StringRequired, "SystemGenNo");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("SystemGenNo", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "ReceiveNo");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("ReceiveNo", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "WorkOrderNo");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("WorkOrderNo", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "FromBu");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("FromBu", 10));
            ValidationRules.AddRule(CommonRules.StringRequired, "FromBuName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("FromBuName", 200));
            ValidationRules.AddRule(CommonRules.StringRequired, "FromWarehouse");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("FromWarehouse", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "FromWarehouseName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("FromWarehouseName", 100));
            ValidationRules.AddRule(CommonRules.StringRequired, "ReceiveBu");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("ReceiveBu", 10));
            ValidationRules.AddRule(CommonRules.StringRequired, "ReceiveBuName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("ReceiveBuName", 200));
            ValidationRules.AddRule(CommonRules.StringRequired, "ReceiveWarehouse");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("ReceiveWarehouse", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "ReceiveWarehouseName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("ReceiveWarehouseName", 100));
            ValidationRules.AddRule(CommonRules.StringRequired, "ShippingName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("ShippingName", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "ShippingNo");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("ShippingNo", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "Location");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Location", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "TransCode");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("TransCode", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "TransCodeName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("TransCodeName", 200));
            ValidationRules.AddRule(CommonRules.StringRequired, "TransReason");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("TransReason", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "Remark");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Remark", 500));
            ValidationRules.AddRule(CommonRules.StringRequired, "AddUserName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("AddUserName", 30));
            //base.AddBusinessRules();
        }
        #endregion
        
        #region Factory Methods 工厂方法

        public V_BH_InsProduct(){}

        public static V_BH_InsProduct New()
        {
            return DataPortal.Create< V_BH_InsProduct>();
        }
        public static V_BH_InsProduct Get(Guid ID)
        {
            return DataPortal.Fetch< V_BH_InsProduct>(new SingleLazyCriteria< V_BH_InsProduct, Guid>(ID, false));
        }
        public static void Delete(Guid ID )
        {
            DataPortal.Delete(ID);
        }
        
        #endregion
        
        #region Data Access 数据访问
        //由于DataPortal_create中没有对数据库的访问，所有标记了Runlocal特性，使得该方法只需在本地运行即可
        //如果代码中有访问数据库的方法，那么就不要用这个特性，使数据门户可以根据情况将此方法的运行选择在应用服务器还是本地
        [RunLocal()]
        protected override void DataPortal_Create()
        {
            //在此调用CheckRules对所有的属性进行验证规则的检查，这样检查只运行一次。
            ValidationRules.CheckRules();
        }


        //可以看到此方法没有标记任何特性
        //此方法要访问数据库所以不能标记本地，由于她没有任何数据库更新操作所以也无需事务性的保护
        //此方法调用结束后会隐含的调用MarkOld（）方法
        private void DataPortal_Fetch(Guid ID)
        {
            //通过连接字符串建立SQL连接对象，Using符号代表，范围释放的意思，SqlConnection对象会在此范围后被释放掉
             using (var ctx = ConnectionManager<SqlConnection>.GetManager(ConnectionStringNames))
            {
                IDb db = DbFactory.Instance.GetDb(ctx.Connection);
                IQuery q = db.Query();
                q.Constrain("ID").Equal(ID);
                
                var data = db.Select< V_BH_InsProduct>(q)[0];
                LoadProperty(IDProperty, data.ID);
                LoadProperty(SystemGenNoProperty, data.SystemGenNo);
                LoadProperty(ReceiveNoProperty, data.ReceiveNo);
                LoadProperty(ReceiveDateProperty, data.ReceiveDate);
                LoadProperty(WorkOrderNoProperty, data.WorkOrderNo);
                LoadProperty(FromBuProperty, data.FromBu);
                LoadProperty(FromBuNameProperty, data.FromBuName);
                LoadProperty(FromWarehouseProperty, data.FromWarehouse);
                LoadProperty(FromWarehouseNameProperty, data.FromWarehouseName);
                LoadProperty(ReceiveBuProperty, data.ReceiveBu);
                LoadProperty(ReceiveBuNameProperty, data.ReceiveBuName);
                LoadProperty(ReceiveWarehouseProperty, data.ReceiveWarehouse);
                LoadProperty(ReceiveWarehouseNameProperty, data.ReceiveWarehouseName);
                LoadProperty(TotalWeightProperty, data.TotalWeight);
                LoadProperty(PaperTubeProperty, data.PaperTube);
                LoadProperty(EmptyWeightProperty, data.EmptyWeight);
                LoadProperty(ShippingWeightProperty, data.ShippingWeight);
                LoadProperty(ShippingNameProperty, data.ShippingName);
                LoadProperty(ShippingNoProperty, data.ShippingNo);
                LoadProperty(LocationProperty, data.Location);
                LoadProperty(TransCodeProperty, data.TransCode);
                LoadProperty(TransCodeNameProperty, data.TransCodeName);
                LoadProperty(TransReasonProperty, data.TransReason);
                LoadProperty(RemarkProperty, data.Remark);
                LoadProperty(AddUserProperty, data.AddUser);
                LoadProperty(AddUserNameProperty, data.AddUserName);
                LoadProperty(AddTimeProperty, data.AddTime);
            }
        }

        [Transactional(TransactionalTypes.TransactionScope)]
        protected override void DataPortal_DeleteSelf()
        {
            //依然是调用下面的方法删除的，只是他此时可以获得自己的Id
            DataPortal_Delete(IDProperty);
        }
        #endregion
	}
}

